#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //修改窗口标题
    this->setWindowTitle("记事本");
    //创建菜单栏
    QMenuBar* menubar = this->menuBar();
    this->setMenuBar(menubar);

    //添加菜单
    QMenu* menu = new QMenu("文件");
    menubar->addMenu(menu);

    //添加菜单项
    QAction* action1 = new QAction("打开文件");
    QAction* action2 = new QAction("保存文件");
    menu->addAction(action1);
    menu->addAction(action2);

    //创建一个输入框
    edit = new QTextEdit();
    //设置输入框的字体
    QFont font;
    font.setPixelSize(20);
    edit->setFont(font);
    //将窗口的中心部件设置为多行输入框
    this->setCentralWidget(edit);

    //将菜单项绑定槽函数
    connect(action1, &QAction::triggered, this, &MainWindow::openfile);
    connect(action2, &QAction::triggered, this, &MainWindow::savefile);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开文件
void MainWindow::openfile()
{
    // 首先弹出一个选择文件的对话框
    QString path = QFileDialog::getOpenFileName(this);
    // 把选择的文件名显示到状态栏里面
    QStatusBar* statusbar = this->statusBar();
    statusbar->showMessage(path);
    //根据用户选择的路径，打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::ReadOnly);
    if(ret == false)
    {
        statusbar->showMessage(path + "打开失败");
        return;
    }
    //读取文件写入输入框
    QString text = file.readAll();
    //关闭文件
    file.close();
    //把读取的文件内容写入到输入框中。
    edit->setText(text);
}

//保存文件
void MainWindow::savefile()
{
    //弹出一个保存文件对话框，选择保存的路径
    QString path = QFileDialog::getSaveFileName(this);
    //在状态栏中显示文件名
    QStatusBar* statusbar = this->statusBar();
    statusbar->showMessage(path);
    //根据选择的路径构造一个QFile对象，并打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::WriteOnly);
    if(ret == false)
    {
        statusbar->showMessage("保存失败");
        return;
    }
    //获取输入框的内容
    const QString text = edit->toPlainText();
    //写入到文件当中
    file.write(text.toUtf8());
    //关闭文件
    file.close();
}
